package features.advance.leetcode.math.easy;

/**
 * @author LIN
 * @date 2022-07-30 16:41
 *
 *  258. 各位相加
 *
 *  难度：简单
 *
 * 给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。返回这个结果。
 *
 *
 *
 * 示例 1:
 *
 * 输入: num = 38
 * 输出: 2
 * 解释: 各位相加的过程为：
 * 38 --> 3 + 8 --> 11
 * 11 --> 1 + 1 --> 2
 * 由于 2 是一位数，所以返回 2。
 * 示例 1:
 *
 * 输入: num = 0
 * 输出: 0
 *
 *
 * 提示：
 *
 * 0 <= num <= 231 - 1
 *
 *
 * 进阶：你可以不使用循环或者递归，在 O(1) 时间复杂度内解决这个问题吗？
 *
 * 本质是计算自然数num 的数根。
 */
public class Solution258 {

    public static void main(String[] args) {
        Solution solution = new Solution() {
            @Override
            public int addDigits(int num) {
                return (num - 1) % 9 + 1;
            }
        };

        int num = 1111111;
        int addDigits = solution.addDigits(num);
        System.out.println(addDigits);
    }

    static class Solution {
        public int addDigits(int num) {
            while(num>=10){
                num = sum(num);
            }
            return num;
        }

        public int sum(int num){
            int sum = 0;
            while(num > 0){
                sum+=num%10;
                num = num / 10;
            }
            return sum;
        }
    }
}
